home *** CD-ROM | disk | FTP | other *** search
- 1000 REM SAVE "@0:NEWPROT.SRC.1200",8
- 1010 :
- 1020 OPEN2,8,2,"@0:NEWPROT1200,P,W"
- 1030 :
- 1040 SYS700
- 1050 ;
- 1060 .OPT O2
- 1070 ;
- 1080 DIFFER = $0000
- 1090 STARTLOC = $C000
- 1100 C64 = 1
- 1110 PNTA = $62
- 1120 PNTB = $64
- 1130 STAT = $96
- 1140 DEFTO = $009A ;DEFAULT OUTPUT DEVICE (KERNAL)
- 1150 PTR1 = $009E ;TAPE PASS1 ERROR LOG (KERNAL)
- 1160 BUFPNTR = $A6 ;POINTER TO TAPE I/O BUFFER (KERNAL) [2]
- 1170 TAPE1 = $B2 ;POINTER TO START OF TAPE BUFFER (KERNAL) [2]
- 1180 ROBUF = $00F9 ;POINTER TO RS232 OUTPUT BUFFER (KERNAL)
- 1190 LASTCH = $0200 ;LAST USED CHARACTER
- 1200 RIDBE = $029B
- 1210 RIDBS = $029C
- 1220 RODBS = $029D ;START POSITION OF RS232 OUTPUT BUFFER (KERNAL)
- 1230 RODBE = $029E ;END POSITION OF RS232 OUTPUT BUFFER (KERNAL)
- 1240 RS232ENB = $02A1 ;RS232 ENABLE=128, DISABLE=255
- 1250 IBSOUT = $0326 ;CHROUT ROUTINE VECTOR (KERNAL) [2]
- 1260 CODEBUF = $C800-DIFFER ;BUFFER FOR INCOMING 3 CHR CODES
- 1270 BITPNT = $C803-DIFFER ;BIT POINTER FOR ALLOWABLE MATCHES
- 1280 BITCNT = $C804-DIFFER ;BIT COUNTER (0 TO 4)
- 1290 BITPAT = $C805-DIFFER ;BIT PATTERN FOR SEARCHES
- 1300 TIMER1 = $C806-DIFFER ;TIMER FOR NON-RECEIVED CHARACTERS (2)
- 1310 GBSAVE = $C808-DIFFER ;LOCATION TO SAVE (null)OD BAD SIGNAL NEEDED
- 1320 BUFCOUNT = $C809-DIFFER ;NUMBER OF CHRS TO BUFFER INTO BLOCK
- 1330 DELAY = $C80B-DIFFER ;DELAY FOR WAIT PERIOD
- 1340 SKPDELAY = $C80C-DIFFER ;DELAY SKIP COUNTER
- 1350 ENDFLAG = $C80D-DIFFER ;FLAG TO INDICATE LAST BLOCK
- 1360 CHECK = $C80E-DIFFER ;SAVE PLACE FOR CHECKSUM (4)
- 1370 CHECK1 = $C812-DIFFER ;SECONDARY CHECKSUM HOLDING PLACE (4)
- 1380 BUFPNT = $C816-DIFFER ;POINTER TO CURRENT BUFFER
- 1390 RECSIZE = $C817-DIFFER ;SIZE OF RECEIVED BUFFER
- 1400 MAXSIZE = $C818-DIFFER ;MAXIMUM BLOCK SIZE
- 1410 BLOCKNUM = $C819-DIFFER ;BLOCK NUMBER (2)
- 1420 FILETYPE = $C81B-DIFFER ;FILE TYPE (FROM BASIC)
- 1430 STACK = $C81C-DIFFER ;STACK POINTER AT ENTRY
- 1440 DONTDASH = $C81D-DIFFER ;FLAG TO SUPPRESS DASHES AND COLONS
- 1450 SPECMODE = $C81E-DIFFER ;FLAG TO SEND SPECIAL START CODE
- 1460 BUFFER = $C900-DIFFER ;BUFFER FOR BLOCK
- 1470 ;
- 1480 ;BUFFER POSITIONS
- 1490 ;
- 1500 SIZEPOS = 4
- 1510 NUMPOS = 5
- 1520 DATAPOS = 7
- 1530 ;
- 1540 XMIT = $CB00
- 1550 OLDOUT = $CB02
- 1560 BASIC4 = $EF06 ;BASIC CALL FROM CHROUT
- 1570 BASIC3 = $EF3B ;BASIC CALL FROM CHROUT
- 1580 SETUP = $EF7E ;SET UP RS232 TO RECEIVE AGAIN
- 1590 ;
- 1600 ;KERNAL LOCATIONS
- 1610 ;
- 1620 BASIC1 = $F80D ;BASIC CALL FROM CHROUT
- 1630 BASIC2 = $F864 ;BASIC CALL FROM CHROUT
- 1640 READST = $FFB7
- 1650 CHKIN = $FFC6 ;OPEN CHANNEL FOR INPUT
- 1660 CHKOUT = $FFC9 ;OPEN CHANNEL FOR OUTPUT
- 1670 CLRCHN = $FFCC ;CLOSE INPUT AND OUTPUT CHANNELS
- 1680 CHRIN = $FFCF ;INPUT CHARACTER FROM CHANNEL
- 1690 CHROUT = $FFD2 ;OUTPUT CHARACTER TO CHANNEL
- 1700 GETIN = $FFE4 ;GET A CHARACTER FROM KEYBOARD QUEUE
- 1710 ZFFFE = $FFFE
- 1720 ;
- 1730 *=STARTLOC
- 1740 ;
- 1750 LDA #00 ;SYS 49152
- 1760 .BYT $2C
- 1770 LDA #03 ;SYS 49155
- 1780 .BYT $2C
- 1790 LDA #06 ;SYS 49158
- 1800 .BYT $2C
- 1810 LDA #09 ;SYS 49161
- 1820 .BYT $2C
- 1830 LDA #12 ;SYS 49164
- 1840 .BYT $2C
- 1850 LDA #15 ;SYS 49167
- 1860 NOP
- 1870 JMP OVER
- 1880 JMP RESET
- 1890 JMP INIT
- 1900 ;
- 1910 OVER STA PNTA
- 1920 TSX
- 1930 STX STACK
- 1940 LDA #<TABLE
- 1950 CLC
- 1960 ADC PNTA
- 1970 STA JMPPOINT+1
- 1980 LDA #>TABLE
- 1990 ADC #$00
- 2000 STA JMPPOINT+2
- 2010 JMPPOINT JMP TABLE
- 2020 ;
- 2030 TABLE JMP ACCEPT
- 2040 JMP RECEIVE
- 2050 JMP TRANSMIT
- 2060 JMP RECTYPE
- 2070 JMP TRANTYPE
- 2080 JMP TERMINAL
- 2090 JMP INIT
- 2100 ;
- 2110 CODES .ASC "GOO"
- 2120 .ASC "BAD"
- 2130 .ASC "ACK"
- 2140 .ASC "S/B"
- 2150 .ASC "SYN"
- 2160 ;
- 2170 ;ACCEPT CHARACTERS AND CHECK FOR CODES
- 2180 ;
- 2190 ACCEPT STA BITPAT ;SAVE REQUIRED BIT PATTERN
- 2200 LDA #$00
- 2210 STA CODEBUF
- 2220 STA CODEBUF+1
- 2230 STA CODEBUF+2
- 2240 CD1 LDA #$00
- 2250 STA TIMER1 ;CLEAR TIMER
- 2260 STA TIMER1+1
- 2270 CD2 JSR EXIT
- 2280 JSR GETNUM ;GET#5,A$
- 2290 LDA STAT
- 2300 BNE CD3 ;IF NO CHR, DO TIMER CHECK
- 2310 LDA CODEBUF+1
- 2320 STA CODEBUF
- 2330 LDA CODEBUF+2
- 2340 STA CODEBUF+1
- 2350 LDA LASTCH
- 2360 STA CODEBUF+2
- 2370 LDA #$00
- 2380 STA BITCNT ;CLEAR BIT COUNTER
- 2390 LDA #$01
- 2400 STA BITPNT ;INITIALIZE BIT POINTER
- 2410 CD4 LDA BITPAT ;LOOK AT BIT PATTERN
- 2420 BIT BITPNT ;IS BIT SET
- 2430 BEQ CD5 ;NO, DON'T CHECK THIS CODE WORD
- 2440 LDY BITCNT
- 2450 LDX #$00
- 2460 CD6 LDA CODEBUF,X
- 2470 CMP CODES,Y
- 2480 BNE CD5
- 2490 INY
- 2500 INX
- 2510 CPX #$03
- 2520 BNE CD6
- 2530 JMP CD7
- 2540 ;
- 2550 CD5 ASL BITPNT ;SHIFT BIT POINTER
- 2560 LDA BITCNT
- 2570 CLC
- 2580 ADC #$03
- 2590 STA BITCNT
- 2600 CMP #15
- 2610 BNE CD4
- 2620 JMP CD1
- 2630 ;
- 2640 CD7 LDA #255
- 2650 STA TIMER1
- 2660 STA TIMER1+1
- 2670 JMP CD2
- 2680 ;
- 2690 CD3 INC TIMER1
- 2700 BNE CD9
- 2710 INC TIMER1+1
- 2720 CD9 LDA TIMER1+1
- 2730 ORA TIMER1
- 2740 BEQ CD8
- 2750 LDA TIMER1
- 2760 CMP #$07
- 2770 .IF C64:LDA TIMER1+1
- 2780 .IF C64:CMP #20
- 2790 BCC CD2
- 2800 LDA #$01
- 2810 STA STAT
- 2820 JMP DODELAY
- 2830 ;
- 2840 CD8 LDA #$00
- 2850 STA STAT
- 2860 RTS
- 2870 ;
- 2880 ;
- 2890 .IF C64:.GOTO 3210
- 2900 ;
- 2910 ;DO A GET# FOR PET
- 2920 ;
- 2930 GETNUM LDX #5
- 2940 JSR CHKIN
- 2950 JSR CHRIN
- 2960 STA LASTCH
- 2970 JSR CLRCHN
- 2980 RTS
- 2990 ;
- 3000 ;DO A GET# FOR PET TERMINAL MODE
- 3010 ;
- 3020 GETNUM1 LDA $E823
- 3030 BPL GT1
- 3040 LDX #5
- 3050 JSR CHKIN
- 3060 JSR CHRIN
- 3070 STA LASTCH
- 3080 JSR CLRCHN
- 3090 LDA $E822
- 3100 LDA #0
- 3110 STA STAT
- 3120 RTS
- 3130 ;
- 3140 GT1 LDA #0
- 3150 STA LASTCH
- 3160 LDA #2
- 3170 STA STAT
- 3180 RTS
- 3190 ;
- 3200 .GOTO 3540
- 3210 ;
- 3220 ;GET# FOR C64
- 3230 ;
- 3240 GETNUM1 NOP
- 3250 GETNUM TYA
- 3260 PHA
- 3270 LDA RIDBE
- 3280 CMP RIDBS
- 3290 BEQ GET1
- 3300 LDY RIDBS
- 3310 LDA ($F7),Y
- 3320 PHA
- 3330 INC RIDBS
- 3340 LDA #$00
- 3350 STA STAT
- 3360 PLA
- 3370 STA LASTCH
- 3380 PLA
- 3390 TAY
- 3400 JMP DORTS
- 3410 ;
- 3420 GET1 LDA #$02
- 3430 STA STAT
- 3440 LDA #$00
- 3450 STA LASTCH
- 3460 PLA
- 3470 TAY
- 3480 ;
- 3490 DORTS PHA
- 3500 LDA #$03
- 3510 STA $BA
- 3520 PLA
- 3530 RTS
- 3540 ;
- 3550 ;SEND A CODE
- 3560 ;
- 3570 SENDCODE LDX #$05
- 3580 JSR CHKOUT
- 3590 LDX #$00
- 3600 SN1 LDA CODES,Y
- 3610 JSR CHROUT
- 3620 INY
- 3630 INX
- 3640 CPX #$03
- 3650 BNE SN1
- 3660 JMP CLRCHN
- 3670 ;
- 3680 ;DO HANDSHAKING FOR RECEPTION END
- 3690 ;
- 3700 RECHAND STA GBSAVE ;SAVE (null)OD OR BAD SIGNAL AS NEEDED
- 3710 LDA #$00
- 3720 STA DELAY ;NO DELAY
- 3730 RC1 LDA #$02
- 3740 STA PNTA
- 3750 LDY GBSAVE
- 3760 JSR SENDCODE ;SEND G/B SIGNAL
- 3770 RC9 LDA #%00100 ;ALLOW "ACK" SIGNALS
- 3780 JSR ACCEPT ;WAIT FOR CODE
- 3790 LDA STAT
- 3800 BEQ RC2 ;IF OK, SEND G/B SIGNAL AGAIN
- 3810 DEC PNTA
- 3820 BNE RC9
- 3830 JMP RC1
- 3840 ;
- 3850 RC2 LDY #$09
- 3860 JSR SENDCODE ;SEND "S/B" CODE
- 3870 LDA ENDFLAG
- 3880 BEQ RC5
- 3890 LDA GBSAVE
- 3900 BEQ RC6
- 3910 RC5 LDA BUFFER+SIZEPOS
- 3920 STA BUFCOUNT
- 3930 STA RECSIZE
- 3940 JSR RECMODEM ;WAIT FOR BLOCK
- 3950 LDA STAT
- 3960 CMP #%0001 ;CHECK FOR (null)OD BLOCK
- 3970 BEQ RC4
- 3980 CMP #%0010 ;CHECK FOR BLANK INPUT
- 3990 BEQ RC2
- 4000 CMP #%0100 ;CHECK FOR LOSS OF SIGNAL
- 4010 BEQ RC4
- 4020 CMP #%1000 ;CHECK FOR "ACK" SIGNAL
- 4030 BEQ RC2
- 4040 RC4 RTS
- 4050 ;
- 4060 RC6 LDA #%10000 ;WAIT FOR "SYN" SIGNAL
- 4070 JSR ACCEPT
- 4080 LDA STAT
- 4090 BNE RC2 ;IF NOT, SEND "S/B" AGAIN
- 4100 LDA #10
- 4110 STA BUFCOUNT
- 4120 RC8 LDY #12 ;SEND "SYN" SIGNAL
- 4130 JSR SENDCODE
- 4140 LDA #%01000 ;WAIT FOR "S/B" SIGNAL
- 4150 JSR ACCEPT
- 4160 LDA STAT
- 4170 BEQ RC7
- 4180 DEC BUFCOUNT
- 4190 BNE RC8
- 4200 RC7 RTS
- 4210 ;
- 4220 ;DO HANDSHAKING FOR TRANSMISSION END
- 4230 ;
- 4240 TRANHAND LDA #$01
- 4250 STA DELAY ;USE DELAY
- 4260 TX2 LDA SPECMODE
- 4270 BEQ TX20
- 4280 LDY #$00
- 4290 JSR SENDCODE ;SEND A "GOO" SIGNAL
- 4300 TX20 LDA #%01011 ;ALLOW "GOO", "BAD", AND "S/B"
- 4310 JSR ACCEPT ;WAIT FOR CODES
- 4320 LDA STAT
- 4330 BNE TX2 ;IF NO SIGNAL, WAIT AGAIN
- 4340 LDA #$00
- 4350 STA SPECMODE
- 4360 LDA BITCNT
- 4370 CMP #$00 ;"GOOD" SIGNAL
- 4380 BNE TX10 ;NO, RESEND OLD BLOCK
- 4390 LDA ENDFLAG
- 4400 BNE TX4
- 4410 INC BLOCKNUM
- 4420 BNE TX7
- 4430 INC BLOCKNUM+1
- 4440 TX7 JSR THISBUF
- 4450 LDY #NUMPOS ;BLOCK NUMBER HIGH ORDER PART
- 4460 INY
- 4470 LDA (PNTB),Y
- 4480 CMP #255
- 4490 BNE TX3
- 4500 LDA #$01
- 4510 STA ENDFLAG
- 4520 LDA BUFPNT
- 4530 EOR #$01
- 4540 STA BUFPNT
- 4550 JSR THISBUF
- 4560 JSR DUMMYBL1
- 4570 JMP TX1
- 4580 ;
- 4590 TX3 JSR DUMMYBLK ;YES, GET NEW BLOCK
- 4600 TX1 LDA #"-"
- 4610 .BYT $2C
- 4620 TX10 LDA #":"
- 4630 JSR PRTDASH
- 4640 LDY #$06
- 4650 JSR SENDCODE ;SEND "ACK" CODE
- 4660 LDA #%01000 ;ALLOW ONLY "S/B" CODE
- 4670 JSR ACCEPT ;WAIT FOR CODE
- 4680 LDA STAT
- 4690 BNE TX1
- 4700 JSR THISBUF
- 4710 LDY #SIZEPOS ;BLOCK SIZE
- 4720 LDA (PNTB),Y
- 4730 STA BUFCOUNT
- 4740 JSR ALTBUF
- 4750 LDX #$05
- 4760 JSR CHKOUT
- 4770 LDY #$00
- 4780 TX6 LDA (PNTB),Y ;TRANSMIT ALTERNATE BUFFER
- 4790 JSR CHROUT
- 4800 INY
- 4810 CPY BUFCOUNT
- 4820 BNE TX6
- 4830 JSR CLRCHN
- 4840 LDA #$00
- 4850 RTS
- 4860 ;
- 4870 TX4 LDA #"*"
- 4880 JSR PRTDASH
- 4890 LDY #$06
- 4900 JSR SENDCODE ;SEND "ACK" SIGNAL
- 4910 LDA #%01000
- 4920 JSR ACCEPT ;WAIT FOR "S/B" SIGNAL
- 4930 LDA STAT
- 4940 BNE TX4 ;IF NOT, RESEND "ACK" SIGNAL
- 4950 LDA #10
- 4960 STA BUFCOUNT
- 4970 TX5 LDY #12
- 4980 JSR SENDCODE ;SEND "SYN" SIGNAL
- 4990 LDA #%10000
- 5000 JSR ACCEPT ;WAIT FOR "SYN" SIGNAL BACK
- 5010 LDA STAT
- 5020 BEQ TX8
- 5030 DEC BUFCOUNT
- 5040 BNE TX5
- 5050 TX8 LDA #$03
- 5060 STA BUFCOUNT
- 5070 TX9 LDY #$09
- 5080 JSR SENDCODE ;SEND "S/B" SIGNAL
- 5090 LDA #$00000
- 5100 JSR ACCEPT ;JUST WAIT
- 5110 DEC BUFCOUNT
- 5120 BNE TX9
- 5130 LDA #$01
- 5140 RTS
- 5150 ;
- 5160 ;RECEIVE A BLOCK FROM THE MODEM
- 5170 ;
- 5180 ; STAT RETURNS WITH:
- 5190 ;
- 5200 ; BIT 0 - BUFFERED ALL CHARACTERS SUCCESSFULLY
- 5210 ; BIT 1 - NO CHARACTERS RECEIVED AT ALL
- 5220 ; BIT 2 - INSUFFICIENT CHARACTERS RECEIVED
- 5230 ; BIT 3 - "ACK" SIGNAL RECEIVED
- 5240 ;
- 5250 RECMODEM LDY #$00 ;START INDEX
- 5260 RCM5 LDA #$00 ;CLEAR TIMERS
- 5270 STA TIMER1
- 5280 STA TIMER1+1
- 5290 RCM1 JSR EXIT
- 5300 JSR GETNUM ;GET A CHR FROM THE MODEM
- 5310 LDA STAT
- 5320 BNE RCM2 ;NO CHARACTER RECEIVED
- 5330 LDA LASTCH
- 5340 STA BUFFER,Y ;SAVE CHR IN BUFFER
- 5350 CPY #$03 ;CHR ONE OF THE FIRST 3
- 5360 BCS RCM3 ;NO, SKIP CODE CHECK
- 5370 STA CODEBUF,Y ;SAVE CHR IN CODE BUFFER
- 5380 CPY #$02 ;ON THE 3RD CHR
- 5390 BNE RCM3 ;NO, DON'T LOOK AT CHRS YET
- 5400 LDA CODEBUF ;CHECK FOR A "ACK" SIGNAL
- 5410 CMP #"A"
- 5420 BNE RCM3
- 5430 LDA CODEBUF+1
- 5440 CMP #"C"
- 5450 BNE RCM3
- 5460 LDA CODEBUF+2
- 5470 CMP #"K"
- 5480 BEQ RCM4 ;"ACK" FOUND
- 5490 RCM3 INY ;INC INDEX
- 5500 CPY BUFCOUNT ;BUFFERED ALL CHRS
- 5510 BNE RCM5 ;NO, BUFFER NEXT
- 5520 LDA #%0001 ;YES, RETURN BIT 0 SET
- 5530 STA STAT
- 5540 RTS
- 5550 ;
- 5560 RCM4 LDA #$FF ;"SYN" FOUND, SET TIMER TO -1
- 5570 STA TIMER1
- 5580 STA TIMER1+1
- 5590 JMP RCM1 ;SEE IF THERE IS ANOTHER CHR
- 5600 ;
- 5610 RCM2 INC TIMER1 ;INC TIMER
- 5620 BNE RCM6
- 5630 INC TIMER1+1
- 5640 RCM6 LDA TIMER1
- 5650 ORA TIMER1+1 ;TIMER NOW AT ZERO
- 5660 BEQ RCM7 ;"SYN" FOUND WITH NO FOLLOWING CHRS
- 5670 LDA TIMER1
- 5680 CMP #$06
- 5690 .IF C64:LDA TIMER1+1
- 5700 .IF C64:CMP #16 ;TIME OUT YET
- 5710 BNE RCM1 ;NO, GET NEXT CHR
- 5720 LDA #%0010 ;YES, SET BIT 1
- 5730 STA STAT
- 5740 CPY #$00
- 5750 BEQ RCM9
- 5760 LDA #%0100 ;BUT IF CHRS RECEIVED, SET BIT 2
- 5770 STA STAT
- 5780 RCM9 JMP DODELAY
- 5790 ;
- 5800 RCM7 LDA #%1000 ;"ACK" FOUND, SET BIT 2
- 5810 STA STAT
- 5820 RTS
- 5830 ;
- 5840 ;CREATE DUMMY BLOCK FOR TRANSMISSION
- 5850 ;
- 5860 DUMMYBLK LDA BUFPNT
- 5870 EOR #$01
- 5880 STA BUFPNT
- 5890 JSR THISBUF ;READ BLOCK INTO "THIS" BUFFER
- 5900 LDY #NUMPOS ;BLOCK NUMBER
- 5910 LDA BLOCKNUM
- 5920 CLC
- 5930 ADC #$01
- 5940 STA (PNTB),Y ;SET BLOCK NUMBER LOW PART
- 5950 INY
- 5960 LDA BLOCKNUM+1
- 5970 ADC #$00
- 5980 STA (PNTB),Y ;SET BLOCK NUMBER HIGH PART
- 5990 LDX #$02
- 6000 JSR CHKIN
- 6010 LDY #DATAPOS ;ACTUAL BLOCK
- 6020 DB1 JSR CHRIN
- 6030 STA (PNTB),Y
- 6040 INY
- 6050 JSR READST
- 6060 BNE DB4
- 6070 CPY MAXSIZE
- 6080 BNE DB1
- 6090 TYA
- 6100 PHA
- 6110 JMP DB5
- 6120 ;
- 6130 DB4 TYA
- 6140 PHA
- 6150 LDY #NUMPOS ;BLOCK NUMBER
- 6160 INY ;HIGH PART
- 6170 LDA #255
- 6180 STA (PNTB),Y
- 6190 JMP DB5
- 6200 ;
- 6210 DUMMYBL1 PHA ;SAVE SIZE OF JUST READ BLOCK
- 6220 DB5 JSR CLRCHN
- 6230 .IF C64:JSR RESET
- 6240 .IF C64:JSR DOD2
- 6250 .IF C64:JSR RESET
- 6260 LDY #SIZEPOS ;BLOCK SIZE
- 6270 LDA (PNTB),Y
- 6280 STA BUFCOUNT ;SET BUFCOUNT FOR CHECKSUM
- 6290 JSR ALTBUF
- 6300 PLA
- 6310 LDY #SIZEPOS ;BLOCK SIZE
- 6320 STA (PNTB),Y
- 6330 JSR CHECKSUM
- 6340 RTS
- 6350 ;
- 6360 ;SET POINTERS FOR CURRENT BUFFER
- 6370 ;
- 6380 THISBUF LDA #<BUFFER
- 6390 STA PNTB
- 6400 LDA BUFPNT
- 6410 CLC
- 6420 ADC #>BUFFER
- 6430 STA PNTB+1
- 6440 RTS
- 6450 ;
- 6460 ;SET POINTER B FOR ALTERNATE BUFFER
- 6470 ;
- 6480 ALTBUF LDA #<BUFFER
- 6490 STA PNTB
- 6500 LDA BUFPNT
- 6510 EOR #$01
- 6520 CLC
- 6530 ADC #>BUFFER
- 6540 STA PNTB+1
- 6550 RTS
- 6560 ;
- 6570 ;CALCULATE CHECKSUM
- 6580 ;
- 6590 CHECKSUM LDA #$00
- 6600 STA CHECK1
- 6610 STA CHECK1+1
- 6620 STA CHECK1+2
- 6630 STA CHECK1+3
- 6640 LDY #SIZEPOS
- 6650 CKS1 LDA CHECK1
- 6660 CLC
- 6670 ADC (PNTB),Y
- 6680 STA CHECK1
- 6690 BCC CKS2
- 6700 INC CHECK1+1
- 6710 CKS2 LDA CHECK1+2
- 6720 EOR (PNTB),Y
- 6730 STA CHECK1+2
- 6740 LDA CHECK1+3
- 6750 ROL A ;SET OR CLEAR CARRY FLAG
- 6760 ROL CHECK1+2
- 6770 ROL CHECK1+3
- 6780 INY
- 6790 CPY BUFCOUNT
- 6800 BNE CKS1
- 6810 LDY #$00
- 6820 LDA CHECK1
- 6830 STA (PNTB),Y
- 6840 INY
- 6850 LDA CHECK1+1
- 6860 STA (PNTB),Y
- 6870 INY
- 6880 LDA CHECK1+2
- 6890 STA (PNTB),Y
- 6900 INY
- 6910 LDA CHECK1+3
- 6920 STA (PNTB),Y
- 6930 RTS
- 6940 ;
- 6950 ;TRANSMIT A PROGRAM
- 6960 ;
- 6970 TRANSMIT LDA #$00
- 6980 STA ENDFLAG
- 6990 STA SKPDELAY
- 7000 STA DONTDASH
- 7010 LDA #$01
- 7020 STA BUFPNT
- 7030 LDA #$FF
- 7040 STA BLOCKNUM
- 7050 STA BLOCKNUM+1
- 7060 JSR ALTBUF
- 7070 LDY #SIZEPOS ;BLOCK SIZE
- 7080 LDA #DATAPOS
- 7090 STA (PNTB),Y
- 7100 JSR THISBUF
- 7110 LDY #NUMPOS ;BLOCK NUMBER
- 7120 LDA #$00
- 7130 STA (PNTB),Y
- 7140 INY
- 7150 STA (PNTB),Y
- 7160 TRM1 JSR TRANHAND
- 7170 BEQ TRM1
- 7180 REC3 LDA #$00
- 7190 STA LASTCH
- 7200 RTS
- 7210 ;
- 7220 ;RECEIVE A FILE
- 7230 ;
- 7240 RECEIVE LDA #$01
- 7250 STA BLOCKNUM
- 7260 LDA #$00
- 7270 STA BLOCKNUM+1
- 7280 STA ENDFLAG
- 7290 STA BUFPNT
- 7300 STA BUFFER+NUMPOS ;BLOCK NUMBER
- 7310 STA BUFFER+NUMPOS+1
- 7320 STA SKPDELAY
- 7330 LDA #DATAPOS
- 7340 STA BUFFER+SIZEPOS ;BLOCK SIZE
- 7350 LDA #$00
- 7360 REC1 JSR RECHAND
- 7370 LDA ENDFLAG
- 7380 BNE REC3
- 7390 JSR MATCH ;DO CHECKSUMS MATCH
- 7400 BNE REC2 ;NO
- 7410 JSR CLRCHN
- 7420 LDA BUFCOUNT
- 7430 CMP #DATAPOS
- 7440 BEQ REC7
- 7450 LDX #$02
- 7460 JSR CHKOUT
- 7470 LDY #DATAPOS
- 7480 REC6 LDA BUFFER,Y
- 7490 JSR CHROUT
- 7500 INY
- 7510 CPY BUFCOUNT
- 7520 BNE REC6
- 7530 JSR CLRCHN
- 7540 REC7 LDA BUFFER+NUMPOS+1 ;BLOCK NUMBER HIGH ORDER PART
- 7550 CMP #$FF
- 7560 BNE REC4
- 7570 LDA #$01
- 7580 STA ENDFLAG
- 7590 LDA #"*"
- 7600 .BYT $2C
- 7610 REC4 LDA #"-"
- 7620 JSR CHROUT
- 7630 .IF C64:JSR RESET
- 7640 LDA #$00
- 7650 JMP REC1
- 7660 ;
- 7670 REC2 JSR CLRCHN
- 7680 LDA #":"
- 7690 JSR CHROUT
- 7700 LDA RECSIZE
- 7710 STA BUFFER+SIZEPOS
- 7720 LDA #$03
- 7730 JMP REC1
- 7740 ;
- 7750 ;SEE IF CHECKSUMS MATCH
- 7760 ;
- 7770 MATCH LDA BUFFER
- 7780 STA CHECK
- 7790 LDA BUFFER+1
- 7800 STA CHECK+1
- 7810 LDA BUFFER+2
- 7820 STA CHECK+2
- 7830 LDA BUFFER+3
- 7840 STA CHECK+3
- 7850 JSR THISBUF
- 7860 LDA RECSIZE
- 7870 STA BUFCOUNT
- 7880 JSR CHECKSUM
- 7890 LDA BUFFER
- 7900 CMP CHECK
- 7910 BNE MTC1
- 7920 LDA BUFFER+1
- 7930 CMP CHECK+1
- 7940 BNE MTC1
- 7950 LDA BUFFER+2
- 7960 CMP CHECK+2
- 7970 BNE MTC1
- 7980 LDA BUFFER+3
- 7990 CMP CHECK+3
- 8000 BNE MTC1
- 8010 LDA #$00
- 8020 RTS
- 8030 ;
- 8040 MTC1 LDA #$01
- 8050 RTS
- 8060 ;
- 8070 ;RECEIVE FILE TYPE BLOCK
- 8080 ;
- 8090 RECTYPE LDA #$00
- 8100 STA BLOCKNUM
- 8110 STA BLOCKNUM+1
- 8120 STA ENDFLAG
- 8130 STA BUFPNT
- 8140 STA SKPDELAY
- 8150 LDA #DATAPOS
- 8160 CLC
- 8170 ADC #$01
- 8180 STA BUFFER+SIZEPOS
- 8190 LDA #$00
- 8200 RCT3 JSR RECHAND
- 8210 LDA ENDFLAG
- 8220 BNE RCT1
- 8230 JSR MATCH
- 8240 BNE RCT2
- 8250 LDA BUFFER+DATAPOS
- 8260 STA FILETYPE
- 8270 LDA #$01
- 8280 STA ENDFLAG
- 8290 LDA #$00
- 8300 JMP RCT3
- 8310 ;
- 8320 RCT2 LDA RECSIZE
- 8330 STA BUFFER+SIZEPOS
- 8340 LDA #$03
- 8350 JMP RCT3
- 8360 ;
- 8370 RCT1 LDA #$00
- 8380 STA LASTCH
- 8390 RTS
- 8400 ;
- 8410 ;TRANSMIT FILE TYPE
- 8420 ;
- 8430 TRANTYPE LDA #$00
- 8440 STA ENDFLAG
- 8450 STA SKPDELAY
- 8460 LDA #$01
- 8470 STA BUFPNT
- 8480 STA DONTDASH
- 8490 LDA #255
- 8500 STA BLOCKNUM
- 8510 STA BLOCKNUM+1
- 8520 JSR ALTBUF
- 8530 LDY #SIZEPOS ;BLOCK SIZE
- 8540 LDA #DATAPOS
- 8550 CLC
- 8560 ADC #$01
- 8570 STA (PNTB),Y
- 8580 JSR THISBUF
- 8590 LDY #NUMPOS ;BLOCK NUMBER
- 8600 LDA #255
- 8610 STA (PNTB),Y
- 8620 INY
- 8630 STA (PNTB),Y
- 8640 LDY #DATAPOS
- 8650 LDA FILETYPE
- 8660 STA (PNTB),Y
- 8670 LDA #$01
- 8680 STA SPECMODE
- 8690 TRF1 JSR TRANHAND
- 8700 BEQ TRF1
- 8710 LDA #$00
- 8720 STA LASTCH
- 8730 RTS
- 8740 ;
- 8750 ;DO DELAY FOR TIMING
- 8760 ;
- 8770 DODELAY INC SKPDELAY
- 8780 LDA SKPDELAY
- 8790 CMP #$03
- 8800 BCC DOD1
- 8810 LDA #$00
- 8820 STA SKPDELAY
- 8830 LDA DELAY
- 8840 BEQ DOD2
- 8850 BNE DOD3
- 8860 ;
- 8870 DOD1 LDA DELAY
- 8880 BEQ DOD3
- 8890 ;
- 8900 DOD2 LDX #$00
- 8910 LP1 LDY #$00
- 8920 LP2 INY
- 8930 BNE LP2
- 8940 INX
- 8950 CPX #120
- 8960 BNE LP1
- 8970 DOD3 RTS
- 8980 ;
- 8990 ;PRINT DASH, COLON, OR STAR
- 9000 ;
- 9010 PRTDASH PHA
- 9020 LDA BLOCKNUM
- 9030 ORA BLOCKNUM+1
- 9040 BEQ PRTD1
- 9050 LDA DONTDASH
- 9060 BNE PRTD1
- 9070 PLA
- 9080 JSR CHROUT
- 9090 PHA
- 9100 PRTD1 PLA
- 9110 RTS
- 9120 ;
- 9130 ;RESET RS232 PORT
- 9140 ;
- 9150 RESET JSR SETUP
- 9160 LDA RS232ENB
- 9170 CMP #$80
- 9180 BEQ RESET
- 9190 CMP #$92
- 9200 BEQ RESET
- 9210 RTS
- 9220 ;
- 9230 ;TERMINAL EMULATION ROUTINE
- 9240 ;
- 9250 TERMINAL JSR CURSOR
- 9260 TERM JSR GETNUM1
- 9270 LDA STAT
- 9280 BNE KEYBJ
- 9290 LDA LASTCH
- 9300 AND #$7F
- 9310 STA LASTCH
- 9320 CMP #$08
- 9330 BEQ OK1
- 9340 CMP #$0D
- 9350 BEQ OK1
- 9360 CMP #$20
- 9370 BPL OK1
- 9380 KEYBJ JMP KEYBOARD
- 9390 ;
- 9400 OK1 CMP #"A"+$20
- 9410 BCC OK2
- 9420 CMP #"Z"+$21
- 9430 BCS OK2
- 9440 SEC
- 9450 SBC #$20
- 9460 STA LASTCH
- 9470 JMP OK3
- 9480 ;
- 9490 OK2 CMP #$41
- 9500 BCC OK3
- 9510 CMP #"Z"+1
- 9520 BCS OK3
- 9530 CLC
- 9540 ADC #$80
- 9550 STA LASTCH
- 9560 ;
- 9570 OK3 CMP #$08
- 9580 BNE OK4
- 9590 LDA #$14
- 9600 STA LASTCH
- 9610 OK4 CMP #34 ;QUOTE
- 9620 BNE OK5
- 9630 JSR CHROUT
- 9640 LDA #20
- 9650 JSR CHROUT
- 9660 LDA #34
- 9670 OK5 LDA LASTCH
- 9680 CMP #$0D
- 9690 BNE OK6
- 9700 LDA #$20
- 9710 JSR CHROUT
- 9720 LDA #$0D
- 9730 OK6 JSR CHROUT
- 9740 JSR CURSOR
- 9750 ;
- 9760 KEYBOARD JSR GETIN
- 9770 BEQ TERM
- 9780 STA LASTCH
- 9790 CMP #$13 ;CLR/HOME KEY
- 9800 BEQ TERMOUT
- 9810 CMP #"A"
- 9820 BCC OK7 ;<"A"
- 9830 CMP #"Z"+1
- 9840 BCS OK7 ;>"Z"
- 9850 CLC
- 9860 ADC #$20 ;TO LOWERCASE ASCII
- 9870 STA LASTCH
- 9880 JMP OK8
- 9890 ;
- 9900 OK7 LDA LASTCH
- 9910 CMP #"A"+$80
- 9920 BCC OK8 ;<"A"
- 9930 CMP #"Z"+$81
- 9940 BCS OK8 ;>"Z"
- 9950 SEC
- 9960 SBC #$80 ;TO UPPERCASE ASCII
- 9970 STA LASTCH
- 9980 ;
- 9990 OK8 CMP #20 ;BACKSPACE
- 10000 BNE OK9
- 10010 LDA #$08
- 10020 STA LASTCH
- 10030 OK9 CMP #$83 ;SHIFT R/S
- 10040 BNE OKA
- 10050 LDA #$10 ;CTRL P
- 10060 STA LASTCH
- 10070 OKA LDX #$05
- 10080 JSR CHKOUT
- 10090 LDA LASTCH
- 10100 JSR CHROUT
- 10110 JSR CLRCHN
- 10120 JMP TERMINAL
- 10130 ;
- 10140 TERMOUT RTS ;WITH CLR/HOME
- 10150 ;
- 10160 CURSOR LDA #$12
- 10170 JSR CHROUT
- 10180 LDA #$20
- 10190 JSR CHROUT
- 10200 LDA #$9D
- 10210 JSR CHROUT
- 10220 LDA #$92
- 10230 JSR CHROUT
- 10240 ;
- 10250 ;CHECK FOR COMMODORE KEY
- 10260 ;
- 10270 EXIT LDA $028D ;IS COMMODORE
- 10280 CMP #$02 ;KEY DOWN
- 10290 BNE EXIT1
- 10300 EXIT2 PLA
- 10310 TSX
- 10320 CPX STACK
- 10330 BNE EXIT2
- 10340 EXIT1 LDA #$01
- 10350 STA LASTCH
- 10360 RTS
- 10370 ;
- 10380 ;MOVE CHROUT VECTOR IF NECESSARY
- 10390 ;
- 10400 INIT LDA IBSOUT ;BEEN MOVED YET
- 10410 CMP #<NEWOUT
- 10420 BNE INIT1 ;NO, CHANGE IT
- 10430 LDA IBSOUT+1
- 10440 CMP #>NEWOUT
- 10450 BEQ INIT2 ;YES, LEAVE IT
- 10460 INIT1 LDA IBSOUT ;STORE OLD CHROUT VECTOR
- 10470 STA OLDOUT
- 10480 LDA IBSOUT+1
- 10490 STA OLDOUT+1
- 10500 LDA #<NEWOUT ;SET NEW CHROUT VECTOR
- 10510 STA IBSOUT
- 10520 LDA #>NEWOUT
- 10530 STA IBSOUT+1
- 10540 INIT2 RTS
- 10550 ;
- 10560 ;NEW CHROUT ROUTINE TO CORRECT FOR 1200 BAUD SPEED PROBLEMS
- 10570 ;
- 10580 NEWOUT PHA ;DUPLICIATON OF ORIGINAL KERNAL ROUTINES
- 10590 LDA DEFTO ;TEST DFAULT OUTPUT DEVICE FOR
- 10600 CMP #$03 ;SCREEN, AND...
- 10610 BNE NEWOUT1
- 10620 PLA ;IF SO, (null) BACK TO ORIGINAL ROM ROUTINES
- 10630 JMP (OLDOUT)
- 10640 ;
- 10650 NEWOUT1 BCC NEWOUT2 ;IF DEVICE NUMBER LESS THAN 3,
- 10660 PLA ;ALSO (null) BACK TO ORIGINAL KERNAL ROUTINES
- 10670 JMP (OLDOUT)
- 10680 ;
- 10690 NEWOUT2 LSR A
- 10700 PLA
- 10710 STA PTR1
- 10720 TXA
- 10730 PHA
- 10740 TYA
- 10750 PHA
- 10760 BCC NEWOUT9
- 10770 JSR BASIC1
- 10780 BNE NEWOUT5
- 10790 JSR BASIC2
- 10800 BCS NEWOUT7
- 10810 LDA #$02
- 10820 LDY #$00
- 10830 STA (TAPE1),Y
- 10840 INY
- 10850 STY BUFPNTR
- 10860 NEWOUT5 LDA PTR1
- 10870 STA (TAPE1),Y
- 10880 NEWOUT6 CLC
- 10890 NEWOUT7 PLA
- 10900 TAY
- 10910 PLA
- 10920 TAX
- 10930 LDA PTR1
- 10940 BCC NEWOUT8
- 10950 LDA #$00
- 10960 NEWOUT8 RTS
- 10970 ;
- 10980 NEWOUT9 JSR NEWOUT10
- 10990 JMP NEWOUT6
- 11000 ;
- 11010 NEWOUT11 JSR NEWOUT12
- 11020 NEWOUT10 LDY RODBE
- 11030 INY
- 11040 CPY RODBS
- 11050 BEQ NEWOUT11
- 11060 STY RODBE
- 11070 DEY
- 11080 LDA PTR1
- 11090 STA (ROBUF),Y
- 11100 ;
- 11110 NEWOUT12 LDA RS232ENB
- 11120 LSR A
- 11130 BCS NEWOUT13
- 11140 LDA #$10
- 11150 STA $DD0E
- 11160 LDA XMIT
- 11170 STA $DD04
- 11180 LDA XMIT+1
- 11190 STA $DD05
- 11200 LDA #$81
- 11210 JSR BASIC3
- 11220 JSR BASIC4
- 11230 LDA #$11
- 11240 STA $DD0E
- 11250 NEWOUT13 RTS
- 11260 ;
- 11270 .END
-